package com.wgzx.modbus.entity;

import com.wgzx.modbus.constant.FunctionCode;
import io.netty.buffer.ByteBuf;

/**
 * modbus请求抽象类 </br>
 * 提供通用编码encode方法，子类根据业务重写</br>
 *
 * @author gexin
 */
public abstract class ModbusReq extends PduData {

    /**
     * 构造参数
     *
     * @param funcCode 功能码
     * @param address  地址
     * @param quantity 数量
     */
    public ModbusReq(FunctionCode funcCode, int address, int quantity) {
        super(funcCode, address, quantity);
    }

    /**
     * 功能码(1) + 地址长度(2字节) + 数据长度(2字节)
     *
     * @return 计算请求报文长度
     */
    public int calculateLength() {
        return 1 + 2 + 2;
    }

    /**
     * 编码modbus请求消息
     *
     * @param buffer 缓冲区
     */
    public void encode(ByteBuf buffer) {
        buffer.writeByte(getFuncCodeValue());
        buffer.writeShort(address);
        buffer.writeShort(value);
    }
}
